#include "Grafo.h"
#include<stdlib.h>
#include<stdio.h>

Grafo::Grafo(int pr)
{
    No *no = new No(pr);
    this->root = no;
    this->tamLinhaAnterior=1; //um unico no root
    this->linhaAnterior= new No*[1]; //inicia com o no root
    this->linhaAnterior[0] = no;
}
Grafo::~Grafo()
{
    delete this->root;
}

void Grafo::addNovaLinha(No **linha)
{
    int i;
    No *noA;
    for(i=0; i< this->tamLinhaAnterior; i++)
    {
        noA = this->linhaAnterior[i];
        noA->setEsq(linha[i]);
        noA->setDir(linha[i+1]);
    }
    this->linhaAnterior = linha;
    this->tamLinhaAnterior +=1;
}

int Grafo::getSoma()
{
    int soma =0, somaAnterior =0;

    getSomaRec(this->root, &soma, somaAnterior);

    return soma;
}
int Grafo::getSomaRec(No *r, int *soma, int somaAnterior)
{
    if(r)
    {
        int somaLocal = somaAnterior+r->getPeso();

        if(r->isFolha()) //se o no eh uma folha
        {
            if(somaLocal > *soma)
            {
                *soma = somaLocal;
            }
            return r->getPeso();
        }
        else
        {
            getSomaRec(r->getEsq(), soma, somaLocal); //vai para esquerda

            getSomaRec(r->getDir(), soma, somaLocal); //vai para a direita

            return  r->getPeso();
        }
    }
    return 0;
}

void Grafo::imprime(No* r)
{
    if(r)
    {
        No *no1, *no2;
        printf("%d_\n", r->getPeso());
        no1 = r->getEsq();
        no2 = r->getDir();
        imprime(no1);
        imprime(no2);

    }
}

